package fr.grassaud.hmvc.application;

import java.util.List;

import fr.grassaud.hmvc.session.HMVCSessionFactory;
import fr.grassaud.hmvc.session.SessionTriadListener;


/**
 * Basic interface to define an HMVC Application. This interface can be implemented to create a specific Application for a framework. 
 * This application is the starting point. Note that for a web application, the starting point is in general the 
 * <code>web.xml</code> descriptor
 * @author vgrassaud
 *
 */
public interface HMVCApplication {

    
    /**
     * Returns the class of the root controller used by this application
     * @return
     */
    Class<?> getRootControllerClass();
    
    
    /**
     * Returns all <code>SessionTriadListener</code> used by the application. 
     * Can be empty if no specific behavior is needed
     * @return all <code>SessionTriadListener</code> used by the application
     */
    List<SessionTriadListener> getSessionTriadListeners();
    
    
    /**
     * Returns the factory used for this application. Cannot be <code>null</code>
     * @return the factory used for this application
     */
    HMVCSessionFactory getHMVCSessionFactory();
    
    
    
}
